8.3. 例外を処理する
この例では、有効な文字列が入力されるまでユーザに入力を促しますが、ユーザがプログラムに (Control-C か、またはオペレーティングシステムがサポートしている何らかのキーを使って) 割り込みをかけてプログラムを中断させることができるようにしています。
もしも except 節 で指定された例外と一致しない例外が発生すると、その例外は try 文の外側に渡されます。
これによりCtrl+Cでプログラムは例外を送出して停止
except 節のクラスは、例外と同じクラスか基底クラスのときに互換 (compatible)となります。
利便性のため、組み込み例外型には __str__() が定義されており、明示的に .args を参照せずとも すべての引数を表示できます。
__str__ allows args to be printed directly, but may be overridden in exception subclasses
Exceptionでワイルドカードとしてキャッチしたとき、argsが空文字列のケースもある
IMO:初手はreprで出力するのがよいのでは
BaseExceptionはすべての例外に共通する基底クラスです。
Exceptionはほぼすべての例外を捕捉するワイルドカードとして使えます。
最も一般的な例外処理のパターンでは、例外を表示あるいはログ出力してから再度送出します(呼び出し側でも例外を処理できるようにします):
except Exception as err:の節の中でraiseだけしている
例外が発生したかどうかを判定したいだけで、その例外を処理するつもりがなければ、単純な形式の raise 文を使って例外を再送出させることができます: (8.4)
以下は過去のバージョンのドキュメントで見た?(Pythonチュートリアルでなくて組み込み例外側かも)
All exceptions inherit from BaseException, and so it can be used to serve as a wildcard. Use this with extreme caution, since it is easy to mask a real programming error in this way!
「すべての例外はBaseExceptionを継承するのでワイルドカードとして使うことができる」
「簡単に実際のプログラミングエラーをマスクできてしまうので、この使用は特に注意してください」
IMO:BaseException(例外の基底クラス)をexceptしない